
class Class {
    constructor(){
        // 设 names 数组中存放学生姓名
        this.names = ['雷军','马云','周鸿祎','丁磊','李彦宏'];
        // 设 courses 数组中依次存放三门课程的名称
        this.courses = ['C++','Java','English'];
        // 设 scores 数组中依次存储 names 数组中各个学生的 C++ 、Java 、English 课程的成绩
        this.scores = [
                        [ 90 , 89 , 75 ] ,
                        [ 59 , 40 , 100 ] ,
                        [ 100 , 99 , 80 ] ,
                        [ 80 , 61 , 61 ] ,
                        [ 60 , 100 , 99 ] ,
                      ];
    }
    display(){
        let str = '' ;
        for( let i = 0 , m = this.names.length ; i < m ; i++ ){
            let name = this.names[ i ] ; // 取得下标为i的学生姓名
            str += name + ' => ';
            let sc = this.scores[ i ] ; // 取得下标为i的学生成绩
            for( let j = 0 , n = this.courses.length ; j < n ; j++ ){
                let courseName = this.courses[j] ; // 取得下标为j的课程名称
                let grade = sc[ j ] ; // 取得下标为j的成绩
                str += courseName + ':' + grade ;
                str += ( j < n - 1 ) ? ', ' : '\n' ; // 最后一个末尾加换行，之前的末尾加逗号
            }
        }
        console.log( str );
    }
    sortBy(course) {
        let index = 0 ; // 定义一个记录课程位置的变量
        // 先找到指定的课程名称在课程数组中的位置
        for( let i = 0 , n = this.courses.length ; i < n ; i++ ){
            if( this.courses[ i ] == course ){ // 如果课程名称是相同的
                index = i ; // 则将当前索引(下标)记录到index变量
                break ;
            }
        }

        for( let i = 0 , n = this.scores.length - 1 ; i < n ; i++ ){
            for( let j = 0 ; j < n - i ; j++ ){
                if( this.scores[ j ][ index ] < this.scores[ j + 1 ][ index ] ){
                    // 交换成绩
                    let temp = this.scores[ j ] ;
                    this.scores[ j ] = this.scores[ j + 1 ] ;
                    this.scores[ j + 1 ] = temp ;

                    // 交换姓名
                    temp = this.names[ j ] ;
                    this.names[ j ] = this.names[ j + 1 ];
                    this.names[ j + 1 ] = temp ;
                }
            }
        }

    }
    sort(){
        for( let i = 0 , n = this.scores.length - 1 ; i < n ; i++ ){
            for( let j = 0 ; j < n - i ; j++ ){
                let sum1 = 0 , sum2 = 0 ;
                // let sum1 = this.scores[j][0] + this.scores[j][1] + this.scores[j][2];
                for( let x = 0 ; x < this.scores[j].length ; x++ ){
                    sum1 += this.scores[j][x];
                }
                // let sum2 = this.scores[j+1][0] + this.scores[j+1][1] + this.scores[j+1][2];
                for( let x = 0 ; x < this.scores[j+1].length ; x++ ){
                    sum2 += this.scores[j+1][x];
                }
                if( sum1 < sum2 ){
                    // 交换成绩
                    let temp = this.scores[ j ] ;
                    this.scores[ j ] = this.scores[ j + 1 ] ;
                    this.scores[ j + 1 ] = temp ;

                    // 交换姓名
                    temp = this.names[ j ] ;
                    this.names[ j ] = this.names[ j + 1 ];
                    this.names[ j + 1 ] = temp ;
                }
            }
        }
    }
}

let c = new Class();
c.display();
// c.sortBy( 'English' );
c.sort();
c.display();